package string;
/** String的演示  */
public class StringDemo {
    public static void main(String[] args) {





        /*
        String s= new String("hello");//创建了2个对象
        问：如上语句创建了几个对象
        答： 2个
            第一个：字面量"hello"
            -----java会创建一个String对象表示字面量"hello",并将其存入常量池中
            第二个：new String()
            -----new String（）时会再创建一个字符串对象，并引用"hello"字符串内容
         */

        String s= new String("hello");//创建了2个对象
        String s1 = "hello";//复用常量池中的字面量对象
        System.out.println(s== s1);//false   ==比较的是地址是否相同


        //在实际应用中，String比较相等一般都是比较的字符串的内容是否相同
        //因此我们需要使用equals()方法来比较两个字符串内容是否相同
        System.out.println(s.equals(s1));
























        /*

        */
       /* String s1 = "123abc";//常量池中还没有，因此创建该字符串，并存入常量池中
        String s2 = "123abc";//常量池中已经有了，直接复用
        String s3 = "123abc";//
        System.out.println(s1.length());
        System.out.println(s2==s3);*/


        /*
        String s1 = "123abc";//堆中创建123abc字符量对象，并缓存到常量池中，
        // 编译器在编译时，若发现是两个字面量相连，则会直接连接好并将结果保存起来
        //如下语句会被编译为String s2 = "123abc";
        String s2 = "123"+"abc";
        System.out.println(s1==s2);//t

        String s3 = "123";
        String s4 = s3 +"abc";
        //因为s3是一个变量，所以编译器并不会直接编译好
        System.out.println(s1 == s4 );//false

        */
    }
}
